使用ssh反向隧道进行内网穿透
使用ssh反向隧道进行内网穿透
yukun引言
既然我们已经有了一个云服务器,那么我们能否把它当成一个跳板,访问云服务器的某个端口时“反向代理”到另一个内网设备上部署的东西呢?
准备工作
一台本地电脑
一台云服务器
反向隧道
1 | ssh -R 0.0.0.0:3000:localhost:3000 -R 0.0.0.0:11434:localhost:11434 -N root@xxxxx.xxx |
相关参数
1 | ssh -R [remote_port]:[bind_address]:[local_port] user@remotehost |
但是会发现外网访问不了,是因为绑定到了 127.0.0.1 上,只有本机可以访问,我们得把他绑定到 0.0.0.0:port 上,才能让外网访问。
打开云服务器上的 ~/.ssh/sshd_config
或者/etc/ssh/sshd_config
1 | 修改 |
然后重启 ssh
1 | sudo systemctl restart ssh |
重新建立反向隧道即可
autossh 使用
autossh 是一个增强版的 SSH 工具,用于自动监控和重启 SSH 隧道。如果网络不稳定或连接断开,autossh 会尝试重新建立连接,非常适合需要持久隧道的场景,比如我的 Open WebUI 和 Ollama 服务。
使用
1 | autossh -M 0 -f -N -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -R 0.0.0.0:3000:localhost:3000 -R 0.0.0.0:11434:localhost:11434 root@xxxxx.xxx |
具体我另开一篇
ollama+open WebUI 部署时外网访问没有模型
这是因为在本地部署时,我们的 ollama 部署在 localhost:11434 端口,然后我们的 openWebUI 是从 11434 中读取模型。
但是我们的 ssh 反向映射到了 linux 上之后,openWebUI 在云服务器上面访问 localhost:11434,也就是访问我们本地的这个端口,在这个过程里出问题了。
我们使用lsof -i :11434
发现是localhost:11434
或者127.0.0.1:11434
也就是说云服务器访问本机的时候失败了。
我们查看ollama 文档可以看到设置服务器
1 | launchctl setenv OLLAMA_HOST "0.0.0.0:11434" |